#include "REG52.H"
#include "..\H_File\lanqin.h"

void main(){
    int i = 0,time_h = 0,time_m = 0,time_d[5] = {2,0,0,0,0};
    //时间输入
    do {
        LED_single(time_d); //循环刷新数码管显示时间

        if(!K1) {
            time_h += 1; //增加一个小时
            while(!K1) ; //等待按键释放
        }
        if(!K2) {
            time_m += 5; //增加五分钟
            while(!K2) ; //等待按键释放
        }
        if(!K3) {
            time_m += 1; //增加一分钟
            while(!K3) ; //等待按键释放
        }

        time_d[1] = time_h / 10; //取小时十位
        time_d[2] = time_h % 10; //取小时个位
        time_d[3] = time_m / 10; //取分钟十位
        time_d[4] = time_m % 10; //取分钟个位
        if(time_m >= 60){ //分钟大于或等于60时，小时加上1小时，分钟减去1小时
            time_h += 1; //小时加1小时
            time_m -= 60; //分钟减1小时
        }
    } while(K4);//K4按键设置为完成输入
    //开始计时
a:
    LED1 = 0; //进度指示灯，即将正常进入计时do-while循环
    do{
        LED3 = 0; //进度指示灯，即将正常进入分钟计时
        if(time_m < 1 && time_h != 0) {
            time_h -= 1;
            time_m += 60;
        }
        time_d[1] = time_h / 10; //取小时十位
        time_d[2] = time_h % 10; //取小时个位
        time_d[3] = time_m / 10; //取分钟十位
        time_d[4] = time_m % 10; //取分钟个位
        LED_single(time_d);
        while(time_m > 0 ){
            LED5 = LED7 = 0; //进度指示灯，即将正常进入秒计时
            for(i = 5900;i;--i){
                if(!(i % 50)) LED7 = !LED7; //进度指示灯，正在进行秒倒计时,正常秒计时情况下闪烁周期为1秒
                LED_single(time_d);
                delay_ms(6); //LED_single 运行需要4毫秒左右的时间，单次for循环需要消耗10毫秒的时间
            }
            time_m -= 1;
            time_d[1] = time_h / 10; //取小时十位
            time_d[2] = time_h % 10; //取小时个位
            time_d[3] = time_m / 10; //取分钟十位
            time_d[4] = time_m % 10; //取分钟个位
        }
    }while(time_m >= 0 && time_h != 0);

    //五分钟后再响
    do{
        LED_SD = 0x00; //关闭所有LED指示灯
        buzzer = 0; //开启蜂鸣器
        if(!K3) {
            buzzer = 1; //关闭蜂鸣器
            while(!K3) ;
            break; //跳出循环，结束闹钟
        }
        if(!K4) {
            buzzer = 1; //关闭蜂鸣器
            time_m += 5; //倒计时再添加5分钟
            while(!K4) ;
            goto a; //进入倒计时do-while循环
        }
    }while(true); //除开两种按钮输入以外不应有其他输出的可能，故应为死循环
}